Virtualization refers to the execution of a virtual machine by physical hardware and then running operating systems and applications on the virtual machine. The virtual machine may represent a least common denominator of hardware functionality or may represent a well-known configuration for which it is easy to prepare an operating system (OS) and applications. Many data centers use virtualization to be able to easily move a virtual machine to new physical hardware as resource requirements increase, for maintenance cycles, and to balance physical server loads. Virtualization is useful for many situations, but can also impose limitations that occur due to many virtual machines contending for the same resources (e.g., central processing unit (CPU), memory, and network interface card (NIC)).
Application virtualization provides a virtual environment at the level of a single application, isolating the application from the underlying OS similarly to the way a virtual machine isolates an OS from the underlying hardware. For example, an operating system may natively run some applications, while providing a virtual environment for running others. This may allow the operating system, for example, to run applications designed for a different operating system. Application virtualization blurs the distinction for the user between applications running natively in the host operating system and applications running in a virtual environment. For example, both types of applications may appear side by side in a taskbar or menu provided by the operating system shell. MICROSOFT Application Virtualization (App-V), for example, transforms applications into centrally managed virtual services that are not installed and do not conflict with other applications. In a physical environment, every application depends on its operating system (OS) for a range of services, including memory allocation, device drivers, and much more. Incompatibility between an application and its OS can be addressed by either server virtualization or presentation virtualization—but incompatibility between two applications installed on the same instance of an OS is solved by application virtualization.
Virtualizing server applications is typically more difficult than other applications. Unlike client applications that often are launched by a user from an operating system shell by running a dedicated executable, server applications may include operating system services, worker processes, and daemons that run on demand or on some schedule. Administrators would like to virtualize server applications, to make them as easy to deploy as copying a package or group of files to a computer system (e.g., xcopy deployable). Server components, such as MICROSOFT Internet Information Server (IIS) do not natively support application virtualization for applications that run using the component. Enterprises would like to virtualize server applications like IIS applications to be more dynamic—they could take the application from machine to machine without reinstalling the application each time. This is productivity saving for enterprises as they can load balance or maintain their servers with much lower overhead. IIS has the concept of a web application (e.g., a web site), and these web applications run inside application pools. IIS specifies this application pool name when creating a worker process to respond to requests for the website. One problem is that there can be conflicts on application names. For example, an administrator may want to virtualize several IIS applications on a single server, where each application (or application pool) has the standard name “Default.” Doing this today causes a conflict so that only the first such web application will run correctly.